import 'dart:math'; //导入系统类库
import 'dart:io'; //包含httpClient
import 'dart:convert';

//导入pub包中的库
import 'package:date_format/date_format.dart';

//如果两个包中有同名类，在Java中可以使用全限定类名使用类可以不用import类，但是dart中必须使用import
//在dart中类库出现冲突，可以使用as 为该包下的类库添加使用前缀，使用的使用 date.Datagram 。。。。
//import 'package:date_format/date_format.dart' as date;

//部分导入
//如果只需要导入类库中的一部分可以使用 show 关键字，选择要导入的内容
//import 'package:date_format/date_format.dart' show date;
//如果要隐藏导入一个类库中的某个功能可以使用hide 隐藏 方法，不导入
//import 'package:date_format/date_format.dart' hide date;

//延迟加载 如果要实现某个类库在使用时才加载可以使用延迟加载，好处是可以提高app加载速度,使用deferred as关键字 指明为延迟加载
/**
 *   在使用延迟加载的类时,需要使用loadLibrary 方法来加载
 *    greet() async {
 *         await date.loadLibrary();
 *        date.format();
 *  }
 */
//import 'package:date_format/date_format.dart' deferred as date;

/// 使用library指令可以创建一个库，每个dart文件都是一个库，即使没有使用library指定
///
/// dart中库的分类
///  1.自定义的类库 import 'lib/xx.dart'
///  2.系统类库 'dart:math'
///  3.第三方类库pub包管理系统中的
///        https://pub.dev/packages
///        https://pub.flutter-io.cn/packages
///        https://pub.dartlang.org/flutter/
void main() async {
  //使用系统类库 math
  /*print(min(1, 2));

  var githubUser = await getGithubUser();
  print(githubUser);*/

  //使用pub包中date_format库
  print(formatDate(DateTime.now(), [yyyy, "-", mm, "-", dd]));
}

//使用dart中的包 请求网络
//发起网络请求使用 async 声明为异步，使用await等待获取数据，两者必须同时出现，
getGithubUser() async {
  //实例化 httpClient
  var http = HttpClient();
  //实例化uri对象
  var uri = Uri.http("api.github.com", "/users/easyrose");
  //发起请求
  var request = await http.getUrl(uri);
  //关闭请求，等待响应
  var response = await request.close();
  //返回结果
  return response.transform(utf8.decoder).join();
}
